Android 关于底部导航栏遮挡问题 | 您所在的位置:网站首页 › 安卓 底部通知怎么设置 › Android 关于底部导航栏遮挡问题 |
判断是否存在底部导航栏
方式一
//获取是否存在NavigationBar
fun checkDeviceHasNavigationBar(context: Context): Boolean {
var hasNavigationBar = false
val rs = context.resources
val id = rs.getIdentifier("config_showNavigationBar", "bool", "android")
if (id > 0) {
hasNavigationBar = rs.getBoolean(id)
}
try {
val systemPropertiesClass = Class.forName("android.os.SystemProperties")
val m = systemPropertiesClass.getMethod("get", String::class.java)
val navBarOverride = m.invoke(systemPropertiesClass, "qemu.hw.mainkeys") as String
if ("1" == navBarOverride) {
hasNavigationBar = false
} else if ("0" == navBarOverride) {
hasNavigationBar = true
}
} catch (e: Exception) {
Log.e("Exxxxxxxxxxx",e.message)
e.printStackTrace()
}
return hasNavigationBar
}
有的手机可以对底部导航栏进行设置,如果直接通过这种方式 判断会导致这类手机也默认存在底部导航栏 出现下方空白 方式二 /** * 横屏可通过 widthPixels - widthPixels2 > 0 来判断底部导航栏是否存在 * @param windowManager * @return true表示有虚拟导航栏 false没有虚拟导航栏 */ @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) fun isNavigationBarShow(windowManager: WindowManager): Boolean { val defaultDisplay = windowManager.defaultDisplay //获取屏幕高度 val outMetrics = DisplayMetrics() defaultDisplay.getRealMetrics(outMetrics) val heightPixels = outMetrics.heightPixels //宽度 val widthPixels = outMetrics.widthPixels //获取内容高度 val outMetrics2 = DisplayMetrics() defaultDisplay.getMetrics(outMetrics2) val heightPixels2 = outMetrics2.heightPixels //宽度 val widthPixels2 = outMetrics2.widthPixels return heightPixels - heightPixels2 > 0 || widthPixels - widthPixels2 > 0 }这个是网上找到通过 虚拟导航栏的高度 = 屏幕高度 - 内容高度 这个公式来判断 当有虚拟导航栏时 屏幕高度 - 内容高度为0 反之则>0 获取底部导航栏高度 /** * 获取底部导航栏高度 * @param context * @return */ fun getNavigationBarHeight(context: Context): Int { val resources = context.resources val resourceId = resources.getIdentifier("navigation_bar_height", "dimen", "android") val height = resources.getDimensionPixelSize(resourceId) return height } 给view设置 padding val view=LayoutInflater.from(this).inflate(layoutResID, parentLinearLayout, true) if(isNavigationBarShow(windowManager)){ view.setPadding(0, 0, 0, getNavigationBarHeight(this)); }else { view.setPadding(0, 0, 0, 0) } 参考https://blog.csdn.net/weixin_43258668/article/details/106143639 https://www.jianshu.com/p/68e6df9d745d |
CopyRight 2018-2019 实验室设备网 版权所有 |